home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / c / boss / boss_sup.lzh / PDDEMO.C < prev    next >
C/C++ Source or Header  |  1992-03-05  |  28KB  |  780 lines

  1. /*
  2. ** DEMONSTRATION OF PULLDOWN MENU SYSTEM USING WINDOWS BOSS.
  3. **
  4. ** Adapted, with permission, from Keith Funk's code.
  5. **
  6. ** Copyright (C) 1992 - Philip A. Mongelluzzo
  7. ** All Rights Reserved.
  8. **
  9. ** Contains all the code needed to implement a complete menuing system
  10. ** including active/inactive menus and menu options, toggle style options,
  11. ** multi-level pulldowns, and more.
  12. */
  13.  
  14. /*
  15. ** Keep everyone happy!!
  16. */
  17.  
  18. int  DoMenu(void);
  19. void domodem(int ch);
  20. void dosetup(int ch);
  21. void dofileman(int ch);
  22. void doview(int ch);
  23. void dographics(int Choice);
  24. void dorun(void);
  25. void doedit(int ch);
  26. void dohelp(int ch);
  27.  
  28. #include "winboss.h"
  29.  
  30. int wa, ba, hka;
  31.  
  32. WNPD mainbar = {
  33.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  34.   0, 6, {                               /* first & last selectable option */
  35.   0, 0,  " File ", 'F', 1, 'A', 1,      /* F = the hotkey for this option */
  36.   0, 6,  " Edit ", 'E', 1, 'A', 2,      /* 1 = option is active. */
  37.   0, 12, " View ", 'V', 1, 'A', 3,      /* A = an action type option. */
  38.   0, 18, " Run ",  'R', 0, 'N', 4,      /* N = no pulldown for this option */
  39.   0, 23, " Setup ",'S', 1, 'A', 5,      /* N is only used in main menus */
  40.   0, 30, " Modem ",'M', 1, 'A', 6,      /* 6 = the return code. */
  41.   0, 50, " Help ", 'H', 1, 'A', 7,      /* Note that the Run option is */
  42.   99,99, "",99 }                        /* inactive. Selecting File/Load */
  43. };                                      /* will activate it. */
  44.  
  45. WNPD pdfile = {
  46.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  47.   0, 9, {
  48.   0, 0, " Load      ", 'L', 1, 'A', 1,
  49.   1, 0, " Save      ", 'S', 1, 'A', 2,
  50.   2, 0, " Save As   ", 'A', 1, 'A', 3,
  51.   3, 0, "───────────", ' ', 0, 'A', 0,  /* '─' is char ALT-196 */
  52.   4, 0, " Chdir     ", 'C', 1, 'A', 4,
  53.   5, 0, "───────────", ' ', 0, 'A', 0,  /* not an option, Must be inactive. */
  54.   6, 0, " Print     ", 'P', 0, 'A', 5,
  55.   7, 0, "───────────", ' ', 0, 'A', 0,
  56.   8, 0, " DOS Shell ", 'D', 0, 'A', 6,  /* 0 = inactive menu option */
  57.   9, 0, " Exit      ", 'x', 1, 'A', 7,  /* hotkeys are case sensitive */
  58.   99, 99, "",99 }
  59. };
  60.  
  61. WNPD pdedit = {
  62.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  63.   0, 2, {
  64.   0, 0, " Cut   ", 't', 1, 'A', 1,      /* Paste is inactive. */
  65.   1, 0, " Copy  ", 'C', 1, 'A', 2,      /* NEVER de-activate a main menu */
  66.   2, 0, " Paste ", 'P', 0, 'A', 3,      /* option that has a pulldown. */
  67.   99, 99, "",99 }                       /* De-activate the pulldown instead*/
  68. };                                      /* so user can see, but not select */
  69.  
  70. WNPD pdview = {
  71.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  72.   0, 2, {
  73.   0, 0, " Input    ", 'I', 0, 'A', 1,   /* all initially inactive, but */
  74.   1, 0, " Output   ", 'O', 0, 'A', 2,   /* will be activated by user */
  75.   2, 0, " Graphics ", 'G', 0, 'A', 3,   /* selecting File/Load and Run */
  76.   99, 99, "",99 }                       /* menu options. */
  77. };
  78.  
  79. WNPD pdsetup = {
  80.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  81.   0, 2, {
  82.   0, 0, " Color    ", 'C', 1, 'T', 1,   /* T = a non-exclusive toggle. */
  83.   1, 0, " Printer  ", 'P', 1, 'A', 2,
  84.   2, 0, " Plotter  ", 'l', 1, 'A', 3,
  85.   99, 99, "",99 }
  86. };
  87.  
  88. WNPD pdmodem = {
  89.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  90.   0, 1, {
  91.   0, 0, " Receive    ", 'R', 1, 'A', 1,
  92.   1, 0, " Send       ", 'S', 1, 'A', 2,
  93.   2, 0, "────────────", ' ', 0, 'A', 0, /* comments must be specified */
  94.   3, 0, " MODEM MUST ", ' ', 0, 'A', 0, /* as inactive. */
  95.   4, 0, "   BE ON    ", ' ', 0, 'A', 0,
  96.   99, 99, "",99 }
  97. };
  98.  
  99. WNPD pdhelp = {
  100.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  101.   0, 3, {
  102.   0, 0, " Contents     ", 'C', 1, 'A', 1,
  103.   1, 0, " Index        ", 'I', 1, 'A', 2,
  104.   2, 0, " Topic     F1 ", 'T', 1, 'A', 3,
  105.   3, 0, " Help On Help ", 'H', 1, 'A', 4,
  106.   99, 99, "",99 }
  107. };
  108.  
  109. WNPD pdprinters = {
  110.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  111.   0, 4, {
  112.   0, 0, " Amdex  ", 'A', 1, 'E', 1,     /* E = mutually Exclusive toggles */
  113.   1, 0, " Epson  ", 'E', 1, 'E', 2,     /* only one can be ON at a time. */
  114.   2, 0, " HP     ", 'H', 1, 'E', 3,
  115.   3, 0, " Roland ", 'R', 1, 'E', 4,
  116.   4, 0, " QMS    ", 'Q', 1, 'E', 5,
  117.   5, 0, "────────", ' ', 0, 'A', 0,
  118.   6, 0, " ESC TO ", ' ', 0, 'A', 0,
  119.   7, 0, "  EXIT  ", ' ', 0, 'A', 0,
  120.   99, 99, "",99}
  121. };
  122.  
  123. WNPD pdgraph = {
  124.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  125.   0, 3, {
  126.   0, 0, " X Axis     ", 'X', 1, 'A', 1,
  127.   1, 0, " Y Axis     ", 'Y', 1, 'A', 2,
  128.   2, 0, " Options    ", 'O', 1, 'A', 3,
  129.   3, 0, " Draw Graph ", 'D', 0, 'A', 4, /* inactive tell X & Y selected */
  130.   99, 99, "",99 }
  131. };
  132.  
  133. WNPD pdxaxis = {
  134.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  135.   0, 4, {
  136.   0, 0, " Time         ", 'T', 1, 'E', 1,
  137.   1, 0, " Stress       ", 'S', 1, 'E', 2,   /* duplicate items in */
  138.   2, 0, " Strain       ", 'r', 1, 'E', 3,   /* this menu and the X */
  139.   3, 0, " Axial Load   ", 'A', 1, 'E', 4,   /* axis menu MUST have */
  140.   4, 0, " Lateral Load ", 'L', 1, 'E', 5,   /* the same return code. */
  141.   99, 99, "",99}
  142. };
  143.  
  144. WNPD pdyaxis = {
  145.   WNLPTR, 0, 0, 0, FALSE, 0,            /* Standard Preamble */
  146.   2, 7, {
  147.   0, 0, " SELECT ONE OR MORE ", ' ', 0, 'A', 0,
  148.   1, 0, "────────────────────", ' ', 0, 'A', 0,
  149.   2, 0, " Stress             ", 'S', 1, 'T', 2,
  150.   3, 0, " Strain             ", 'r', 1, 'T', 3,
  151.   4, 0, " Axial Load         ", 'A', 1, 'T', 4,
  152.   5, 0, " Lateral Load       ", 'L', 1, 'T', 5,
  153.   6, 0, " Transducer Voltage ", 'V', 1, 'T', 6,
  154.   7, 0, " Clear All Options  ", 'C', 1, 'A', 7,
  155.   99, 99, "",99}
  156. };
  157.  
  158. main()
  159. {
  160. unsigned int ch;
  161. WINDOWPTR mainwin, msgwin;
  162. int i;
  163.  
  164.   int AllDone = 0;                      /* 1 = exit program */
  165.   wn_init();                            /* save entry screen */
  166.   v_cls(NVIDEO);                        /* clear screen */
  167.   wn_border(1);                         /* single ruled border */
  168.  
  169. /*
  170. ** window for main program to execute in
  171. */
  172.  
  173.   mainwin = wn_open(0, 1, 0, 78, 21, v_setatr(BLUE,WHITE,0,BOLD), NVIDEO);
  174.  
  175. /* 
  176. ** window to display messages 
  177. */
  178.  
  179.   msgwin = wn_open(1000, 24,0,80,1, v_setrev(NVIDEO), v_setrev(NVIDEO));
  180.  
  181.   wa = v_setatr(WHITE,BLACK,0,0);       /* window attirbute. */
  182.   ba = v_setatr(WHITE,BLACK,0,0);       /* border attribute. */
  183.   hka = v_setatr(WHITE,WHITE,0,BOLD);   /* hotkey attribute. */
  184.  
  185. /*
  186. ** Menu Bar
  187. */
  188.  
  189.   wn_pdopen(1000,0,0,80,1,wa,ba,hka, &mainbar, FALSE); 
  190.  
  191. /* 
  192. ** Explain a bit about the demo program. 
  193. */
  194.  
  195.   wn_puts(mainwin, 1, 13, "              PULLDOWN MENU DEMO PROGRAM");
  196.   wn_puts(mainwin, 3, 13, "1. Run is inactive until you select File/Load.");
  197.   wn_puts(mainwin, 4, 13, "2. The View options are activated by File/Load and Run.");
  198.   wn_puts(mainwin, 5, 13, "3. Edit/Paste and File/DOS options are never activated.");
  199.   wn_puts(mainwin, 6, 13, "4. Setup/Printers activates the File/Print option.");
  200.   wn_puts(mainwin, 7, 13, "5. Selecting X and Y axis options, activates Display Graph.");
  201.   wn_puts(mainwin, 8, 13, "6. When a pulldown menu is active, use the left/right");
  202.   wn_puts(mainwin, 9, 13, "   arrow keys to view others. Run has no pulldown menu.");
  203.  
  204. /*
  205. ** Provide instructions on message line...
  206. */ 
  207.  
  208.   wn_puts(msgwin, 0, 1, "<Slash Key '/' Activates The Menu>");
  209.  
  210. /*
  211. ** main program loop. Does nothing practical. Simply displays a moving
  212. ** counter to show that the program is doing something until the
  213. ** user activates the menu. 
  214. */
  215.  
  216.   i = 0;
  217.   while (!AllDone)
  218.   {
  219.     while (!v_kstat())                  /* do stuff until key hit */
  220.     {
  221.       wn_locate(mainwin, 12, 26);
  222.       wn_printf(mainwin, "Main Program Is Running %5d", i);
  223.       i = (++i > 32000) ? 0 : i;
  224.     }
  225.  
  226.     ch = (v_getch() & 0x7F);            /* get the key pressed. */
  227.     if (ch == '/')                      /* activate the menu */
  228.     {
  229.       wn_clr(msgwin);
  230.       wn_puts(msgwin, 0, 1, "<ESC Exits Menus>  <Any Key Exits Messages>");
  231.       wn_locate(mainwin, 12, 26);
  232.       wn_printf(mainwin, "                                  ");
  233.  
  234.